<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * 观点管理控制器-后台
 * 
 * @desc    观点管理
 * @version 1.0.0 直接完善文档注释
 * @date	2017年7月7日 上午10:20:53
 * 
 * @title 观点管理
 * @entry http://discovery.segway.com
 */
class Opinion extends MY_Manager_Controller
{
	/** @var Lib_opinion */
	public $lib_opinion = null;
	
	/** @var Lib_tag */
	public $lib_tag = null;
	
	public function __construct()
	{
		parent::__construct();
		
		$this->load->library('lib_opinion');
		// Somewhere need lib_tag
		$this->load->library('lib_tag');
		
		$this->set_mutable_view_var('head.title', 'Opinion - Management');
		$this->set_mutable_view_var('head.keywords', '');
		$this->set_mutable_view_var('head.description', '');
		
		$this->lang->load('opinion');
		
	}
	
	/**
	 * 首页 -> 列表页
	 *
	 * @return html
	 *
	 * @command pass noneurl
	 */
	public function index()
	{
		$this->listing();
	}
	
	/**
	 * 观点列表 - 所有观点列表页
	 * 
	 * @desc	所有观点的列表页，包括评论内容、评论打分、反馈等各种类型
	 * @author	Jason
	 * @date	2017年7月7日 上午10:23:16
	 * @link	/manage/opinion/listing
	 */
	public function listing($page = 1, $number = 20)
	{
		$conditions = $this->lib_opinion->get_conditions();
		$list = $this->lib_opinion->get_opinions_list($conditions, $page, $number);
		// Somewhere need lib_tag
		$list['data'] = $this->lib_tag->append_relations_for_resource_list($list['data'], 'opinion', true);
		$data['list'] = $list;
		
		$this->load->view('manager/opinion/list', $data);
	}
	
	/**
	 * 评论列表（主评辍子评） - 路线订单评论（内容辍评分）列表页
	 *
	 * @desc	路线订单评论的列表页，每条数据涵盖评论内容、评论图片、评论均分和各种类型的评分，也可以含所有标签
	 * @author	Jason
	 * @date	2017年7月7日 上午10:39:59
	 * @link	/manage/opinion/listing_route_order_comment
	 */
	public function listing_route_order_comment($page = 1, $number = 20)
	{
		$conditions = $this->lib_opinion->get_conditions();
		$list = $this->lib_opinion->get_master_opinions_list_for_routeOrderComment($conditions, $page, $number);
		$target_types = $this->config->item('route_order_comment', 'opinion')['slave_target_types'];
		$list['data'] = $this->lib_opinion->append_component_for_master_list($list['data'], $target_types);
		$data['list'] = $list;
		
		$this->load->view('manager/opinion/list_route_order_comment', $data);
	}
	
	/**
	 * 反馈列表 - 所有反馈列表页
	 *
	 * @desc	包括针对各种目标资源类型的反馈
	 * @author	Jason
	 * @date	2017年7月26日 上午11:04:38
	 * @link	/manage/opinion/listing_feedback
	 */
	public function listing_feedback($page = 1, $number = 20)
	{
		$conditions = $this->lib_opinion->get_conditions();
		$conditions[] = ['where', "resource_type='feedback'"];
		$list = $this->lib_opinion->get_opinions_list($conditions, $page, $number);
		$data['list'] = $list;
		
		$this->load->view('manager/opinion/list_feedback', $data);
	}
	// MARK ajax 列表页
	/**
	 * 观点列表，ajax，JSON - 所有观点列表页
	 *
	 * @desc	所有观点的列表页，包括评论内容、评论打分、反馈等各种类型
	 * @author	Jason
	 * @date	2017年7月7日 上午10:23:16
	 * @link	/manage/opinion/ajax_listing
	 */
	public function ajax_listing($page = 1, $number = 20)
	{
		$conditions = $this->lib_opinion->get_conditions();
		$list = $this->lib_opinion->get_opinions_list($conditions, $page, $number);
		// Somewhere need lib_tag
		$list['data'] = $this->lib_tag->append_relations_for_resource_list($list['data'], 'opinion', true);
		$data['list'] = $list;
		
		Lib_json::renderSuccess($data);
	}
	
	/**
	 * 评论列表（主评辍子评），ajax，JSON - 路线订单评论（内容辍评分）列表页
	 *
	 * @desc	路线订单评论的列表页，每条数据涵盖评论内容、评论图片、评论均分和各种类型的评分，也可以含所有标签
	 * @author	Jason
	 * @date	2017年7月7日 上午10:39:59
	 * @link	/manage/opinion/ajax_listing_route_order_comment
	 */
	public function ajax_listing_route_order_comment($page = 1, $number = 20)
	{
		$conditions = $this->lib_opinion->get_conditions();
		$list = $this->lib_opinion->get_master_opinions_list_for_routeOrderComment($conditions, $page, $number);
		$target_types = $this->config->item('route_order_comment', 'opinion')['slave_target_types'];
		$list['data'] = $this->lib_opinion->append_component_for_master_list($list['data'], $target_types);
		$data['list'] = $list;
		
		Lib_json::renderSuccess($data);
	}
	
	/**
	 * 反馈列表，ajax，JSON - 所有反馈列表页
	 *
	 * @desc	包括针对各种目标资源类型的反馈
	 * @author	Jason
	 * @date	2017年7月26日 上午11:04:38
	 * @link	/manage/opinion/ajax_listing_feedback
	 */
	public function ajax_listing_feedback($page = 1, $number = 20)
	{
		$conditions = $this->lib_opinion->get_conditions();
		$conditions[] = ['where', "resource_type='feedback'"];
		$list = $this->lib_opinion->get_opinions_list($conditions, $page, $number);
		$data['list'] = $list;
		
		Lib_json::renderSuccess($data);
	}
	
	/**
	 * 观点详情 - 编辑前信息载入
	 * 
	 * @desc	编辑前信息载入
	 * @method	GET
	 * @author	Jason
	 * @date	2017年7月7日 下午3:25:04
	 * 
	 * @param	number $id       ID，默认为 0，代表新增一条记录
	 * 			把参数按顺序辍到 URL 之后，用 "/" 间隔
	 * @example	如果参数为 id=1
	 * 			那么URL为 /manage/opinion/detail/1
	 * 
	 * @demoParam id 5
	 */
	public function detail($id = 0)
	{
		$opinion = $this->lib_opinion->get_opinion_detail($id);
		if (empty($opinion)) {
			$opinion = [];
		}
		
		$data['content']['opinion'] = $opinion;
		
		$this->load->view('manager/opinion/detail', $data);
	}
	
	/**
	 * 观点详情 之 路线订单评论详情 - 编辑前信息载入
	 * 
	 * @desc	编辑前信息载入
	 * @method	GET
	 * @author	Jason
	 * @date	2017年7月7日 下午6:49:51
	 * 
	 * @param	number $id       ID，默认为 0，代表新增一条记录
	 * 			把参数按顺序辍到 URL 之后，用 "/" 间隔
	 * @example	如果参数为 id=1
	 * 			那么URL为 /manage/opinion/detail_route_order_comment/1
	 * 
	 * @demoParam id 5
	 */
	public function detail_route_order_comment($id = 0)
	{
		$opinion = $this->lib_opinion->get_opinion_detail($id);
		if (empty($opinion)) {
			$opinion = [];
		}
		$target_types = $this->config->item('route_order_comment', 'opinion')['slave_target_types'];
		$opinion = $this->lib_opinion->append_component_for_master_list([$opinion], $target_types)[0];
		
		$data['content']['opinion'] = $opinion;
	
		$this->load->view('manager/opinion/detail_route_order_comment', $data);
	}
	
	/**
	 * 观点详情编辑提交 - 编辑完后的信息提交 - 增加 & 修改
	 * 
	 * @desc	编辑完后的信息提交 - 增加 & 修改
	 * @method	POST
	 * @author	Jason
	 * @date	2017年7月7日 下午4:08:04
	 * 
	 * @param	number $id		 ID，默认为 0，代表增加 & 非0代表修改
	 * ...
	 *
	 * @return	JSON	标准JSON格式响应
	 * 					结构：无
	 * 
	 * @link	/manage/opinion/ajax_create
	 * 
	 * @command noneurl
	 */
	public function ajax_create()
	{
		if (empty($id = $this->input->post('id'))) {
			list($status, $content) = $this->lib_opinion->create();
		} else {
			list($status, $content) = $this->lib_opinion->update();
		}
		
		if(!$status) {
			$messageContent = Lib_json::getMessageContent($content);
			Lib_json::renderError(Lib_json::ERROR_BUSINESS, current($content), $messageContent);
		} else {
			Lib_json::renderSuccess(['data' => $content], 'success');
		}
	}
	
	private function get_post_score($key)
	{
		$score = $this->input->post($key);
// 		$score = '-54.32'; // -> 4.0
// 		$score = '-54.52'; // -> 4.5
// 		$score = '-54.92'; // -> 4.5
		$score = floatval($score);
		$score = abs($score);
		$score = round($score, 1);
		$score = ($score > 5.0) ? fmod($score, 5.0) : $score;
		// 五入法结果
		// 4.2 -> 4.0
		// 4.3 -> 4.5
		// 4.9 -> 5.0
		// 抹零法结果
		// 4.4 -> 4.0 <- 8 <- 8.8
		// 4.5 -> 4.5 <- 9 <- 9.0
		// 4.9 -> 4.5 <- 9 <- 9.8
		// $score = round($score * 2, 0) / 2;
		#$score = intval($score * 2) / 2; // double(4.5) but int(4)
		$score = floor($score * 2) / 2; // double(4.5) and double(4)
		// var_dump($score);
		return $score;
	}
	private function get_post_tags($key)
	{
		$tags = $this->input->post($key);
		return is_string($tags) ? explode(',', $tags) : $tags;
	}
	
	/**
	 * 观点详情添加 之 <span style="color:red;">添加路线订单评论</span> - 添加评论时编辑完成之后的信息提交 - 评论只增加 不能修改
	 * 
	 * @desc	添加一条路线订单的评论，包括各种评分和打标签，评论内容和图片。
	 * @method	POST
	 * @author	Jason
	 * @date	2017年7月10日 上午10:20:36
	 * 
	 * @param	number $id			订单ID
	 * @param	string $language	当前用户语言标识
	 * @param	string $content		评论内容
	 * @param	number $ms_score	商家服务质量评价打分：0.0 ~ 5.0
	 * @param	string $ms_tags		商家服务质量标签，用 “,” 分隔
	 * @param	number $gl_score	...
	 * @param	number $gl_tag		...
	 * ...
	 * @param	string $images		上传的图片
	 * 
	 * @return	JSON	标准JSON格式响应
	 * 					结构：无
	 * 
	 * @link	/manage/opinion/ajax_create_route_order_comment
	 *
	 * @command noneurl
	 */
	public function ajax_create_route_order_comment()
	{
		/* 分析：
		order_id(resource_id): -> member_id touroute_id -> merchant_id guide_id (touroute_id order_id)
		ms: score tags
		gl: score tags
		rd: score tags
		re: score tags
		mc: weighted_avg_score content images
		
		平均分，记录到对应实体 cumulative_score1234+= / total_count1234++
		*/
		$order_id = $this->input->post('id');
		$language = $this->input->post('language') ?: 'english';
		$content = $this->input->post('content');
		$images = $this->input->post('images');
		$images = is_array($images) ? implode(',', $images) : $images;
		
		// TODO about order
// 		$this->load->library('lib_touroute_order');
// 		$related_ids = $this->lib_touroute_order->get_related_ids($order_id);
		$related_ids = [
				'resource_id' => $order_id,
				'member_id' => $this->get_logined_member()['id'],
				'touroute_id' => 45,
				'merchant_id' => 106,
// 				MARK 评论降维
// 				'guide_id' => 2,
// 				'designer_id' => 45, // same as touroute_id
// 				'experience_id' => 45, // same as touroute_id
		];
		$slave_info = [
				'merchantService' => [
						'target_id' => $related_ids['merchant_id'],
						'score' => $this->get_post_score('ms_score'),
						'tags' => $this->get_post_tags('ms_tags'),
				],
// 				MARK 评论降维
// 				'guidesLevel' => [
// 						'target_id' => $related_ids['guide_id'],
// 						'score' => $this->get_post_score('gl_score'),
// 						'tags' => $this->get_post_tags('gl_tags'),
// 				],
// 				'routeDesign' => [
// 						'target_id' => $related_ids['designer_id'],
// 						'score' => $this->get_post_score('rd_score'),
// 						'tags' => $this->get_post_tags('rd_tags'),
// 				],
// 				'rideExperience' => [
// 						'target_id' => $related_ids['experience_id'],
// 						'score' => $this->get_post_score('re_score'),
// 						'tags' => $this->get_post_tags('re_tags'),
// 				],
		];
		
		list($status, $content) = $this->lib_opinion->create_route_order_comment(
				$related_ids, $content, $images, $slave_info, $language);
		
		if(!$status) {
			$messageContent = Lib_json::getMessageContent($content);
			Lib_json::renderError(Lib_json::ERROR_BUSINESS, current($content), $messageContent);
		} else {
			Lib_json::renderSuccess(['data' => $content], 'success');
		}
	}
	
	/**
	 * 观点状态切换
	 * 
	 * @desc	观点状态切换，可以切换角色的各种状态！
	 * @method	POST
	 * @author	Jason
	 * @date	2017年7月7日 下午5:30:19
	 * 
	 * @param	number $id	观点ID
	 * @param	string $tag	观点正向标签，启用(enabled)、审核通过(checked)、审核完毕(check_over)、置顶(sticky)
	 * 
	 * @return	JSON	标准JSON格式响应
	 * 
	 * @link	/manager/opinion/ajax_toggle_status
	 * 
	 * @command noneurl
	 */
	public function ajax_toggle_status()
	{
		list($status, $content) = $this->lib_opinion->toggle_status_positive_tag();
		
		if(!$status) {
			Lib_json::renderError(Lib_json::ERROR_BUSINESS, current($content));
		} else {
			Lib_json::renderSuccess(['data' => $content]);
		}
	}
	
	/**
	 * 观点审核通过与不通过
	 * 
	 * @method	POST
	 * @author	Jason
	 * @date	2017年6月14日 下午3:19:03
	 *
	 * @param	number $id			ID
	 * @param	string $judgement	通过还是不通过，accepted/rejected，默认拒绝
	 * @param	string $comment		通过备注，不通过原因，可选
	 *
	 * @return	JSON	标准JSON格式响应
	 *
	 * @link /manager/opinion/ajax_change_checking_status
	 * 
	 * @command noneurl
	 */
	public function ajax_change_checking_status()
	{
		#$_POST['module'] = 'opinion';
		#$this->lib_opinion->open_checking_switch_status($this->input->post('id'));
		list($status, $content) = $this->lib_opinion->change_checking_status();
		
		if(!$status) {
			Lib_json::renderError(Lib_json::ERROR_BUSINESS, current($content));
		} else {
			Lib_json::renderSuccess(['data' => $content]);
		}
	}
	
}
